// setTimeout(() => {
//     console.log(1)
//     new Promise((resolve) => {
//         console.log(2)
//         resolve()
//     }).then(() => {
//         console.log(3)
//     })
// })

// async function async1() {
//     console.log(4);
//     await async2()
//     console.log(5)
// }
// async function async2() {
//     console.log(6)
// }

// console.log(7);
// async1();
// console.log(8)


//先执行宏任务，同步任务打印7，然后这执行async1函数，肯定接着打印4，然后又执行async2，所以打印6，然后打印8
//以上其实都是同步任务，Promise本身是同步的立即执行函数，也就是说传递给promise的那个函数其实是同步的
//现在async，await实际上是Promise的语法糖。那么async函数中在await之前的代码都会在主线程中依次执行的
// await会把await下面的代码变成微任务，所以执行微任务，拿到await async2()的结果，然后打印5
//最后开启下一个任务，执行宏任务，打印1，打印2，执行微任务打印3

console.log(1)
        setTimeout(() => {
            console.log(2)
            process.nextTick(() => {
                console.log(3)
            })
            new Promise((resolve) => {
                console.log(4)
                resolve()
            }).then(() => {
                console.log(5)
            })
        })
        // process.nextTick(() => {
        //     console.log(6)
        // })
        new Promise((resolve) => {
            console.log(7)
            resolve()
        }).then(res => {
            console.log(8)
        })
        process.nextTick(() => {
            console.log(6)
        })
        setTimeout(() => {
            console.log(9)
            process.nextTick(() => {
                console.log(10)
            })
            new Promise((resolve) => {
                console.log(11)
                resolve()
            }).then(res => {
                console.log(12)
            })
        })